﻿using System.Collections.Generic;
using System.Data;

namespace Architecture.DataLayer.DbAccess
{
    /// <summary>
    /// Esta clase es la encargada de ser el puente entre la capa de negocios y la capa de datos.
    /// Además mapea objetos de la capa de negocios a objetos que el DataHelper pueda entender y viceversa
    /// </summary>
    /// <typeparam name="TDataReader"></typeparam>
    /// <typeparam name="TCollection"></typeparam>
    /// <typeparam name="TDataParameter"></typeparam>
    public abstract class DataManager<TDataReader, TCollection, TDataParameter>
        // Tipo de IDataReader que devuelve el DataHelper interno
        where TDataReader : IDataReader
        // Tipo de IEnumerable que recibe el DataHelper interno
        where TCollection : IEnumerable<TDataParameter>
        // Tipo de DataParameter que recibe el DataHelper interno
        where TDataParameter : IDataParameter
    {

        #region Attributes
        /// <summary>
        /// DataHelper hacia el cuál mapea los objetos del negocio y del cual recibe los resultados
        /// del data source para convertirlos en objetos del negocio
        /// </summary>
        protected DataManager<TDataReader, TCollection, TDataParameter> DataHelper;
        #endregion
    }
}
